package src.com.client.service;

import src.com.qqcommon.Message;
import src.com.qqcommon.MessageType;

import java.io.*;

/**
 * 完成文件传输
 */
public class FileClientService {
    /**
     * 传输文件
     * @param src 源文件地址
     * @param des 欲存入的目标地址
     * @param senderId 发送者
     * @param getterId 接收者
     */
    public void sendFileToOne(String src, String des, String senderId, String getterId) {
        // 读取src文件 --> message
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_FILE_MES);
        message.setSrc(src);
        message.setDes(des);
        message.setSender(senderId);
        message.setGetter(getterId);

        // 读取文件
        FileInputStream fileInputStream = null;
        byte[] fileBytes = new byte[(int)new File(src).length()];

        try {
            fileInputStream = new FileInputStream(src);
            fileInputStream.read(fileBytes); // 将原文件读至字节数组
            // 将文件对应的字节数组 设置到message对象
            message.setFileBytes(fileBytes);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            // 关闭流
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }

        // 显示提示信息
        System.out.println(senderId + " 给 " + getterId + " 发送文件 " + src + " 到对方的 " + des + " 目录");
        System.out.println("待发送文件长度为 " + fileBytes.length);

        // 发送文件
        try {
            ObjectOutputStream oos = new ObjectOutputStream
                    (ManageClientConnectServerThread.getClientConnectServerThread(senderId).getSocket().getOutputStream());
            oos.writeObject(message);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
